package com.istock.union.user.service;

import java.util.List;

import com.istock.base.common.api.model.ApiBaseResponse;
import com.istock.base.common.api.model.PageInfo;
import com.istock.union.user.model.SSOUser;
import com.istock.union.user.model.UserInfo;
import com.istock.union.user.model.UserInfoQueryModel;
import com.istock.union.user.model.ext.UserInfoVO;

public interface UserInfoService {
	
	/**判断一个user是否为超级管理员
	 * 
	 * @param ssoUser
	 * @return
	 */
	@Deprecated
	public boolean isAdmin(SSOUser ssoUser);
	
	/**页面查询用户列表信息
	 * @param user
	 * @param page
	 * @return
	 */
	public List<UserInfoVO> selectUserVOListByPage(UserInfoQueryModel user, PageInfo<UserInfoVO> page);
	
	/**页面查询用户列表信息
	 * @param user
	 * @param page
	 * @return
	 */
	public List<UserInfo> selectUserListByPage(UserInfoQueryModel user, PageInfo<UserInfo> page);
	
	/**插入一个用户
	 * @param user
	 * @param roleIdList
	 */
	public void insertUser(UserInfo user , List<String> roleIdList);
	
	/**修改一个用户
	 * @param user
	 * @param roleList
	 */
	public void updateUser(UserInfo user , List<String> roleList);
	
	/**
	 * 校验密码，已知用户Name，方便内部使用，通过之后返回用户信息
	 * 
	 * @param userId
	 * @param password
	 * @return
	 */
	public ApiBaseResponse<SSOUser> checkPasswd(String userName, String passwd, String tenantCode);
	
	/**通过userId,检查用户的密码
	 * @param userId
	 * @param passwd
	 * @return
	 */
	public ApiBaseResponse<UserInfo> checkUserPasswd(String userId, String passwd);
	
	/**
	 * 修改密码，修改密码并且添加密码记录
	 * 
	 * @param user
	 * @param confirmNewPassword
	 */
	public void changePassword(String userId, String confirmNewPassword);
	
	/**通过id删除用户
	 * @param ids
	 */
	public void deleteUserByIds(List<String> ids);
	
	/**
	 * 修改用户信息
	 * 
	 * @param user
	 */
	public int updateUserStatus(String userId,Integer status , String opName);
	
	/**
	 * 根据ID查询用户详细信息
	 * 
	 * @param id
	 * @return
	 */
	public UserInfo selectUserDetailsById(String id);
	
	/**
	 * 检查登录用户名是否唯一
	 * 
	 * @param user
	 * @return
	 */
	public Boolean checkLoginNameUnique(UserInfo user);

	/**
	 * 检查电话号是否唯一
	 * 
	 * @param user
	 * @return
	 */
	public Boolean checkPhoneUnique(UserInfo user);
	
	/**
	 * 检查邮箱是否唯一
	 * 
	 * @param user
	 * @return
	 */
	public Boolean checkEmailUnique(UserInfo user);
}
